package com.ftg.learn.chapter17.generic;

/**
 * -- 第一个可以出现的位置
 *  - 类声明的后面
 *    <>名称(尽量用最少的标识来完成这个功能)</>
 *  - 还可以作为方法的参数类型
 *  - 还可以作为方法的返回值类型
 *  -- 广泛类型类型 : 就是为了让类当中部分的类型可以随着使用者的需要而发生变化.
 *  - 可以有几个泛型？
 *    T 相当于形参
 *
 *   --两个不相关的类，本身不能强制转换
 * @author KangJx
 * @date 2021/8/5
 */
public class Learngeneric<T extends Number> {

    T[] t1 = (T[]) new Object[23];

//    T t2;
//
//    public Learngeneric(T t3){
//        this.t2 = t3;
//    }


    //1、vector  list
    //2、stack
    //3、泛型 (百度 ... 容器stack泛型 )

    /**
     * 这是一个方法 ，这个方法参数类型为T
     *  -- t1的真实值 你不知道
     *  -- t1的真实类型 你也不知道
     *
     *
     * @param t1
     */
    public T add(T t1,T t2){

        if( t1 instanceof Integer){
            int a = ((Number)t1).intValue();
            int b = ((Number)t2).intValue();
            return (T)((Number)(a + b));
        }else if(t1 instanceof Double){
            double a1 = ((Number)t1).doubleValue();
            double b1 = ((Number)t2).doubleValue();
            return (T)((Number)(a1 + b1));
        }
        return null;
    }

    public <T> void show(T t) {
        System.out.println(t);
    }

    public static void main(String[] args) {
        Learngeneric<Integer> l = new Learngeneric();
        l.show(23);
        l.show(45);
    }

}
